home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / C and C++ / Libraries / CHyperText 1.2 / CHyperDemoApp.cp < prev    next >
Text File  |  1994-04-05  |  8KB  |  309 lines

  1. /******************************************************************************
  2.  CHyperDemoApp.cp
  3.  
  4.         
  5.     SUPERCLASS = CApplication
  6.     
  7.     Copyright © 1994 Johns Hopkins University. All rights reserved.
  8.     
  9.     Original Author:     Martin R. Wachter        email:    mrw@welchgate.welch.jhu.edu
  10.     Created:            4/4/94                    by:        mrw            TCL Version:    1.1.3
  11.     Modified:            4/5/94                    by:        mrw            TCL Version:    1.1.3
  12.  
  13.  ******************************************************************************/
  14.  
  15. #include "CHyperDemoApp.h"
  16. #include "CDLOGDirector.h"
  17. #include "CDemoDialog.h"
  18.  
  19.     // to suppress class stripping only
  20. #include "CButton.h"
  21. #include "CRadioControl.h"
  22. #include "CRadioGroupPane.h"
  23. #include "CStdPopupPane.h"
  24. #include "CCheckBox.h"
  25. #include "CIconPane.h"
  26. #include "CIntegerText.h"
  27. #include "CHyperText.h"
  28.  
  29. extern    OSType    gSignature;
  30.  
  31. #define        kExtraMasters        4
  32. #define        kRainyDayFund        20480
  33. #define        kCriticalBalance    20480
  34. #define        kToolboxBalance        20480
  35.  
  36. /***
  37.  * IHyperDemoApp
  38.  *
  39.  *    Initialize the application. Your initialization method should
  40.  *    at least call the inherited method. If your application class
  41.  *    defines its own instance variables or global variables, this
  42.  *    is a good place to initialize them.
  43.  *
  44.  ***/
  45.  
  46. void CHyperDemoApp::IHyperDemoApp(void)
  47.  
  48. {
  49.     CApplication::IApplication( kExtraMasters, kRainyDayFund, 
  50.                         kCriticalBalance, kToolboxBalance);
  51.     
  52.  
  53. /*  The parameters to IApplication are the number of times to call  
  54.     MoreMasters, the total number of bytes of heap space to reserve for                       
  55.     monitoring low memory situations, and the portion of the memory
  56.     reserve to set aside for critical operations and toolbox calls.
  57.     
  58.     Four (4) is a reasonable number of MoreMasters calls,                           
  59.     but you should determine a good number for your application                     
  60.     by observing the heap using Lightsbug,                                              
  61.     TMON, or Macsbug. Set this parameter to zero, give your                         
  62.     program a rigorous work-out, then look at the heap and count                        
  63.     how many master pointer blocks have been allocated. Master                      
  64.     pointer blocks are nonrelocatable and have a size of $100                           
  65.     (hex). You should call MoreMasters at least this many                               
  66.     times -- add a few extra just to be safe. The purpose of all                        
  67.     this preflighting is to prevent heap fragmentation. You                             
  68.     don't want the Memory Manager to call MoreMasters and                           
  69.     create a nonrelocatable block in the middle of your heap. By                        
  70.     calling MoreMasters at the very beginning of the program,                           
  71.     you ensure that these blocks are allocated in a group at the                        
  72.     bottom of the heap. 
  73.                                                                         
  74.     The memory reserve is a safeguard for handling low memory                   
  75.     conditions and is used by the GrowMemory method in                              
  76.     CApplication (check there for more comments). In general,                           
  77.     your program should never request a memory block greater                        
  78.     than this reserve size without explicitly checking in                               
  79.     advance whether there is enough free memory to satisfy the                      
  80.     the request.
  81.                                                                                     
  82.  */
  83.  
  84. }
  85.  
  86.  
  87.  
  88. /***
  89.  * SetUpFileParameters
  90.  *
  91.  *    In this routine, you specify the kinds of files your
  92.  *    application opens.
  93.  *
  94.  *
  95.  ***/
  96.  
  97. void CHyperDemoApp::SetUpFileParameters(void)
  98.  
  99. {
  100.     inherited::SetUpFileParameters();    /* Be sure to call the default method */
  101.  
  102.         /**
  103.          **    sfNumTypes is the number of file types
  104.          **    your application knows about.
  105.          **    sfFileTypes[] is an array of file types.
  106.          **    You can define up to 4 file types in
  107.          **    sfFileTypes[].
  108.          **
  109.          **/
  110.  
  111.     sfNumTypes = 1;
  112.     sfFileTypes[0] = 'TEXT';
  113.  
  114.         /**
  115.          **    Although it's not an instance variable,
  116.          **    this method is a good place to set the
  117.          **    gSignature global variable. Set this global
  118.          **    to your application's signature. You'll use it
  119.          **    to create a file (see CFile::CreateNew()).
  120.          **
  121.          **/
  122.  
  123.     gSignature = '?\??\?';
  124. }
  125.  
  126. /***
  127.  * SetUpMenus 
  128.  *
  129.  * Set up menus which must be created at run time, such as a
  130.  * Font menu. You can eliminate this method if your application
  131.  * does not have any such menus.
  132.  *
  133. ***/
  134.  
  135.  void CHyperDemoApp::SetUpMenus()
  136.  {
  137.  
  138.   inherited::SetUpMenus();  /*  Superclass takes care of adding     
  139.                                 menus specified in a MBAR id = 1    
  140.                                 resource    
  141.                             */                          
  142.  
  143.         /* Add your code for creating run-time menus here */    
  144.  }
  145.  
  146.  
  147.  
  148. /***
  149.  * DoCommand
  150.  *
  151.  *    Your application will probably handle its own commands.
  152.  *    Remember, the command numbers from 1-1023 are reserved.
  153.  *  The file Commands.h contains all the predefined TCL
  154.  *  commands.
  155.  *
  156.  *    Be sure to call the default method, so you can get
  157.  *    the default behvior for standard commands.
  158.  *
  159.  ***/
  160. void CHyperDemoApp::DoCommand(long theCommand)
  161.  
  162. {
  163.     CDirector     *director;
  164.  
  165.     switch (theCommand) {
  166.     
  167.         /* Your commands go here */
  168.         case cmdNew:
  169.             director = DoDemoDialogClass(TRUE);
  170.             Quit();
  171.             break;
  172.             
  173.         default:    inherited::DoCommand(theCommand);
  174.                     break;
  175.     }
  176. }
  177.  
  178.  
  179. /***
  180.  *
  181.  * UpdateMenus 
  182.  *
  183.  *   Perform menu management tasks
  184.  *
  185. ***/
  186.  
  187.  void CHyperDemoApp::UpdateMenus()
  188.  {
  189.   inherited::UpdateMenus();     /* Enable standard commands */      
  190.  
  191.     /* Enable the commands handled by your Application class */ 
  192.  }
  193.  
  194.  
  195. /***
  196.  * Exit
  197.  *
  198.  *    Chances are you won't need this method.
  199.  *    This is the last chance your application gets to clean up
  200.  *  things like temporary files before terminating.
  201.  *
  202.  ***/
  203.  
  204. void CHyperDemoApp::Exit()
  205.  
  206. {
  207.     /* your exit handler here */
  208. }
  209.  
  210.  
  211. /******************************************************************************
  212.  ForceClassReferences
  213.  
  214.      This method creates dummy references to classes that we don't want
  215.      stripped out by the linker when the application is built. This could
  216.      happen if the class is only created via new_by_name and is never directly
  217.      referenced. CApplication automatically calls this method.
  218.      
  219. ******************************************************************************/
  220.  
  221.  
  222. void    CHyperDemoApp::ForceClassReferences( void)
  223. {
  224.     Boolean alwaysFalse = FALSE;
  225.     CObject *dummy = NULL;
  226.     
  227.     if (alwaysFalse == TRUE)
  228.     {
  229.         member( dummy, CButton);
  230.         member( dummy, CCheckBox);
  231.         member( dummy, CRadioControl);
  232.         member( dummy, CRadioGroupPane);
  233.         member( dummy, CIconPane);
  234.         member( dummy, CIntegerText);
  235.         member( dummy, CStdPopupPane);
  236.         member( dummy, CHyperText);    
  237.     }
  238. }
  239.  
  240.  
  241. /******************************************************************************
  242.  DoDemoDialog
  243.  
  244.      Creates a dialog from the DLOG resource with the given ID.
  245. ******************************************************************************/
  246.  
  247. CDirector *CHyperDemoApp::DoDemoDialog( short resID, Boolean modal)
  248. {
  249.     CDLOGDirector    *dialog = NULL;
  250.     long            cmd;
  251.     
  252.     TRY
  253.     {
  254.         dialog = new CDLOGDirector;    
  255.         dialog->IDLOGDirector( resID, this);
  256.         dialog->BeginDialog();
  257.             
  258.         if (modal)
  259.         {
  260.             cmd = dialog->DoModalDialog( cmdOK);    
  261.             ForgetObject( dialog);
  262.         }
  263.     }
  264.     CATCH
  265.     {
  266.         ForgetObject( dialog);
  267.     }
  268.     ENDTRY;
  269.     
  270.     return dialog; // not null if dialog is non-modal
  271.  
  272. }
  273.  
  274.  
  275. /******************************************************************************
  276.  DoDemoDialogClass
  277.  
  278.      Like DoDemoDialog but creates the object from a specific CDemoDialog lass.
  279. ******************************************************************************/
  280.  
  281. CDirector *CHyperDemoApp::DoDemoDialogClass(Boolean modal)
  282. {
  283.     CDemoDialog        *dialog = NULL;
  284.     long            cmd;
  285.     
  286.     TRY
  287.     {
  288.         dialog = new CDemoDialog;    
  289.         dialog->IDemoDialog();
  290.         dialog->BeginDialog();
  291.             
  292.         if (modal)
  293.         {
  294.             cmd = dialog->DoModalDialog( cmdOK);    
  295.             ForgetObject( dialog);
  296.         }
  297.     }
  298.     CATCH
  299.     {
  300.         ForgetObject( dialog);
  301.     }
  302.     ENDTRY;
  303.     
  304.     return dialog; // not null if dialog is non-modal
  305.  
  306. }
  307.  
  308.  
  309.